package com.example.springsecurity.mapper;

import com.example.springsecurity.domain.Echart;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @ClassName ProjectCountEchartsMapper
 * @Description TODO
 * @Author lvyongwei
 * @Date 2020-10-20 9:22
 **/
@Mapper
public interface ProjectCountEchartsMapper {

    /**
     * 获取项目学院分布
     * @return
     */
    public List<Map<String,Object>> getCollegeDistribute();

    /**
     * 获取项目专业分布
     * @return
     */
    public List<Map<String,Object>> getMajorDistribute();


    /**
     * 获取校内教学实验布置轮次
     * @param schoolYear
     * @param projectId
     * @return
     */
    public List<Map<String,Object>> getAssignCount(@Param("schoolYear") String schoolYear,@Param("projectId") Integer projectId);

    /**
     * 获取校内教学学生使用人次
     * @param schoolYear
     * @return
     */
    public List<Map<String,Object>> getAssignStudentCount(@Param("schoolYear") String schoolYear,@Param("projectId") Integer projectId);

    /**
     * 获取所有项目
     * @param kind
     * @return
     */
    public List<Echart> getAllProject(Integer kind);

    /**
     * 获取共享统计学习人次
     * @param ranking
     * @param time
     * @param projects
     * @return
     */
    public List<Echart> getStudyCount(@Param("ranking") Integer ranking,@Param("time") Date time,@Param("list") List<Echart> projects);

    /**
     * 获取共享统计完成人次
     * @param ranking
     * @param time
     * @param projectId
     * @return
     */
    public List<Echart> getFinishCount(@Param("ranking") Integer ranking,@Param("time") Date time,@Param("projectId") Integer projectId);

    /**
     * 获取共享统计学习时长
     * @param ranking
     * @param projectId
     * @return
     */
    public List<Echart> getStudyTime(@Param("ranking") Integer ranking,@Param("projectId") Integer projectId,@Param("time") Date time);

    /**
     * 获取在共享统计大目录下，某一个实验的成绩分布
     * @param projectId
     * @return
     */
    public List<Map<String,Object>> getScoreDistributeByShare(Integer projectId);

    /**
     * 获去校内教学下的某一个实验成绩分布
     * @param projectId
     * @return
     */
    public List<Map<String,Object>> getScoreDistributeAll(@Param("projectId") Integer projectId,@Param("time") String time);

    /**
     * 校内教学成绩分布  (获取当前学年该实验是否布置)
     * @param projectId
     * @param time
     * @return
     */
    public Integer getAssignCountById(@Param("projectId") Integer projectId,@Param("time") String time);

    /**
     * 获取已批改的数量
     * @param projectId
     * @return
     */
    public Integer getCorrected(@Param("projectId") Integer projectId,@Param("time")String time);

    /**
     * 获取已提交的数量
     * @param projectId
     * @return
     */
    public Integer getSubmitted(@Param("projectId") Integer projectId,@Param("time")String time);

    /**
     * 获取未提交的数量
     * @param projectId
     * @return
     */
    public Integer getUnSubmitted(@Param("projectId") Integer projectId,@Param("time")String time);

    /**
     * 获取优秀人数
     * @param projectId
     * @return
     */
    public Integer getExcellent(@Param("projectId") Integer projectId,@Param("time")String time);

    /**
     * 获取及格人数
     * @param projectId
     * @return
     */
    public Integer getPass(@Param("projectId") Integer projectId,@Param("time")String time);


    /**
     * 获取已批改人数 （共享实验人数）
     * @param projectId
     * @return
     */
    public Integer getCorrected2(Integer projectId);

    /**
     * 获取优秀人数 (共享实验人数)
     * @param projectId
     * @return
     */
    public Integer getExcellent2(Integer projectId);

    /**
     * 获取及格人数 （共享实验人数）
     * @param projectId
     * @return
     */
    public Integer getPass2(Integer projectId);

    /**
     * 获取所有布置的人数
     * @return
     */
    public Integer getAllAssign();

    /**
     * 获取所有共享体验人次
     * @return
     */
    public Integer getAllShare();

    /**
     * 获取所有必修提交时长
     * @return
     */
    public Double getAllAssignHour();

    /**
     * 获取所有共享提交时长
     * @return
     */
    public Double getAllShareHour();

    /**
     * 获取总注册人数
     * @return
     */
    public Integer getAllRegister();


    /**
     * 根据实验项目id获取实验项目内容
     * @param projectIds
     * @return
     */
    public List<Echart> getProjects(@Param("projectIds") List<Integer> projectIds);

    /**
     * 根据实验项目id获取实验项目内容
     * @param userId
     * @return
     */
    public List<Echart> getProjectsShare(@Param("userId") Long userId);
}
